#include "algoritmos.h"


long pdLinha(char *linha, char *padrao, int numLinha, int erro, int* ocorrencias) {
  long comp = 0;
  int n = strlen(linha);
  int m = strlen(padrao);
  (*ocorrencias) = 0;


  int i, lact, pos, pC, nC;
  
      clock_t inicio, fim;
    inicio = clock();
  
  // pre-processamento
  int C[1000];  
  for (i=0; i<=m; i++) {
      C[i]=i;
  }



  // busca
  lact = erro + 1;
  for (pos=1; pos<=n; pos++) {
    pC = 0;
    nC = 0;
    for (i=1; i<=lact; i++) {
      if (padrao[i-1] == linha[pos-1]) {
         nC = pC;
      } else {
        if (pC < nC) nC = pC;
        if (C[i] < nC) nC = C[i];
        nC = nC + 1;
      }
      pC = C[i];
      C[i] = nC;
      comp++;
    }
    while (C[lact] > erro) {
        lact = lact-1;
        comp++;
    }
    if (lact == m) {
        if (!ANALISE) imprimeResultado(linha, padrao, numLinha, pos-m+1);
        (*ocorrencias)++;
    } else {
        lact = lact + 1;
    }
  }
  
  fim = clock();
  //printf("tempo=%f\n", ( (float)fim -(float)inicio ) / ( (float)CLOCKS_PER_SEC ));
  
  return comp;
}

long pdTexto(char **texto, char *padrao, int nLinhasTexto, int linhaInicial, int erro, float* tempo, int* ocorrencias) {
    long comparacoes = 0;
    int i=0;
    int ocorrenciasLinha = 0;
    *ocorrencias = 0;
    
    clock_t inicio, fim;
    inicio = clock();
    
    for (i=0; i<nLinhasTexto; i++) {
        char *linha = texto[i];
        comparacoes += pdLinha(linha, padrao, linhaInicial, erro, &ocorrenciasLinha);
        linhaInicial++;
        *ocorrencias += ocorrenciasLinha;
    }
    
   
    fim = clock();
    *tempo = ( (float)fim -(float)inicio ) / ( (float)CLOCKS_PER_SEC );
    
    return comparacoes;
}
